SenseMyFEUP data
Data loading
Data is filtered by travelmode (car and bus) and date (April 2016).
Intersession times
Visualizing intersession times
All intersession time Porto April16
Intersession time along the week
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`
Histogram intersession time.
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`
Number of sessions per way_id
Filtering by sessions per way_id
Edges with >50 sessions.
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`
Top 10% points
Map points April 2016
Showing maps
Traffic Map April Porto 2016 all
Traffic Map April 2016 all >50
Traffic day Map April 2016
Traffic night Map April 2016
Top 12 edges

Map Intersession time (<1.3h) day.

Map Intersession time (<2h)night.

–>
#Sessions by date >50
Day of the week

By day

By hour

Speeds >50
df_hotedges_april16pt %>%
group_by(hour =hour(time)) %>%
summarise(avg_speed = mean((speed*18)/5)) %>%
ggplot(aes(hour, avg_speed)) +
geom_line() +
scale_x_continuous(breaks = seq(0,23,1))+
ylab("Avg speed km/h")

Speed by week

Speed by day
Speed by hour
Number of session per hour
Ways_ids per half hour
prueba <- table(cut(filter(df_hotedges_april16pt, day(time) < 7)$time, breaks = "30 mins"))
plot(prueba, xlab = "date", ylab = "frequency")
Time serie per way_id
filter(df_hotedges_april16pt, way_id == 37141967 ) %>%
group_by(day(time)) %>%
ggplot(aes(x= time, y= (speed*18)/5)) +
geom_line()
LS0tCnRpdGxlOiAnU2Vuc2UgTXkgRkVVUCAtIEFwcmlsIDIwMTYgRGF0YScKYXV0aG9yOiAiRGFuaWVsYSBTLiBHaWwiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyIGVjaG8gPSBGQUxTRSwgZXZhbD1GQUxTRX0Kc2F2ZS5pbWFnZSgiU2Vuc2VteVdvcmtTcGFjZS5SRGF0YSIpCiNsb2FkKCJkZl9maXJzdF9zZXNzaW9uX2NhcnNfYXByaWwxNi5SZGEiKQpsb2FkKCJTZW5zZW15V29ya1NwYWNlLlJEYXRhIikKCmBgYAoKCiMgU2Vuc2VNeUZFVVAgZGF0YQojIyBEYXRhIGxvYWRpbmcKIERhdGEgaXMgZmlsdGVyZWQgYnkgdHJhdmVsbW9kZSAoY2FyIGFuZCBidXMpIGFuZCBkYXRlIChBcHJpbCAyMDE2KS4gICAgICAKCmBgYHtyIGVjaG89RkFMU0V9CiNGaWx0ZXJpbmcgYnkgcmVjdGFuZ2xlIGluIFBvcnRvIAoKZGZfZWRnZXNfYXByaWwxNiA8LSBkZl9zcGVlZAoKZGZfZWRnZXNfYXByaWwxNnB0IDwtIGRmX3NwZWVkICU+JSAKICBmaWx0ZXIobGF0IDwgNDEuMTg1OTM1MjgwODE1NSwgbGF0ID4gNDEuMTM2NDcyNjU0NiwgbG9uID4gLTguNjkxMjk0MDY4MTQwNSwgbG9uIDwgLTguNTUzOTY5MzQyMjgpCmBgYAoKIyMgSW50ZXJzZXNzaW9uIHRpbWVzCgojIyMgVmlzdWFsaXppbmcgaW50ZXJzZXNzaW9uIHRpbWVzCmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9RkFMU0V9CgojR2V0dGluZyBkYXRhIGZyb20gZGZfc3BlZWQKCmRmX2ludGVyc2Vzc2lvbl9hcHJpbDE2cHQgPC0gZGZfZWRnZXNfYXByaWwxNnB0ICU+JSAKICBncm91cF9ieSh3YXlfaWQsIHNlc3Npb25faWQpICU+JSAKICBzdW1tYXJpc2Uoc2Vjb25kcyA9IG1pbihzZWNvbmRzKSkKCiMgVHJhbnNmb3JtaW5nIHNlY29uZHMgdG8gdGltZXN0YW1wIGFuZCBjYWxjdWxhdGluZyBpbnRlcnNlc3Npb24gdGltZS4KCmRmX2ludGVyc2Vzc2lvbl9hcHJpbDE2cHQkdGltZSA8LSBhcy5QT1NJWGN0KGRmX2ludGVyc2Vzc2lvbl9hcHJpbDE2cHQkc2Vjb25kcywgb3JpZ2luPSIxOTcwLTAxLTAxIikKZGZfZWRnZXNfYXByaWwxNnB0JHRpbWUgPC0gYXMuUE9TSVhjdChkZl9lZGdlc19hcHJpbDE2cHQkc2Vjb25kcywgb3JpZ2luPSIxOTcwLTAxLTAxIikKCmRmX2ludGVyc2Vzc2lvbl9hcHJpbDE2cHQgPC0gZGZfaW50ZXJzZXNzaW9uX2FwcmlsMTZwdCAgJT4lCiAgYXJyYW5nZShkZXNjKHdheV9pZCksIHRpbWUpICU+JSAKICBtdXRhdGUoaW50ZXJzZXNzaW9uX3RpbWUgPSBjKDAsYXMubnVtZXJpYyhkaWZmKHRpbWUpLCB1bml0cz0ibWlucyIpKSkKCiMgUmVtb3ZlIE1pbiBjb2x1bW4KIyBkZl9pbnRlcnNlc3Npb25fYXByaWwkbWluIDwtIE5VTEwgCmBgYAoKQWxsIGludGVyc2Vzc2lvbiB0aW1lIFBvcnRvIEFwcmlsMTYgCmBgYHtyIGVjaG89RkFMU0V9CnBsb3RfbHkoeSA9IGRmX2ludGVyc2Vzc2lvbl9hcHJpbDE2cHQkaW50ZXJzZXNzaW9uX3RpbWUsIHR5cGUgPSAiYm94IiwgbmFtZSA9ICJBbGwgd2F5X2lkcyIpICU+JSAKICBhZGRfYm94cGxvdCh5PSBmaWx0ZXIoZGZfaW50ZXJzZXNzaW9uX2FwcmlsMTZwdCwgaW50ZXJzZXNzaW9uX3RpbWUgPiAwICkkaW50ZXJzZXNzaW9uX3RpbWUsIG5hbWUgPSAiQXQgbGVhc3QgMiBzZXNzaW9ucyIpICU+JSAKICBsYXlvdXQodGl0bGU9IkludGVyc2Vzc2lvbiB0aW1lIChtaW5zKSIsIHlheGlzID0gbGlzdChyYW5nZSA9IGMoMCw1MDAwKSkpCgpgYGAKCkludGVyc2Vzc2lvbiB0aW1lIGFsb25nIHRoZSB3ZWVrIApgYGB7ciBlY2hvPUZBTFNFfQpwIDwtIGdncGxvdChkZl9pbnRlcnNlc3Npb25fYXByaWwxNnB0LCBhZXMoeCA9IHdlZWtkYXlzKHRpbWUpLCB5ID0gaW50ZXJzZXNzaW9uX3RpbWUsIGZpbGwgPSBpbnRlcmFjdGlvbih3ZWVrZGF5cyh0aW1lKSkgKSkgKyAKICBnZW9tX2JveHBsb3QoKSArIAogIHhsYWIoIkRheXMgb2YgdGhlIHdlZWsiICkgKwogIHlsYWIoIkludGVyc2Vzc2lvbiB0aW1lIChtaW5zKSIpICsKICBnZ3RpdGxlKCJJbnRlcnNlc3Npb24gdGltZShtaW4pIGluIHRoZSB3ZWVrICIpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikgKwogICAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBjKCJEb21pbmdvIiwgIlNlZ3VuZGEiLCAiVGVyw6dhIiwgIlF1YXJ0YSIsICJRdWludGEiLCAKICAgICJTZXh0YSIsICJTw6FiYWRvIikpICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwxMDAwMCkpCgoKcCA8LSBwbG90bHlfYnVpbGQocCkKcAoKYGBgCgpIaXN0b2dyYW0gaW50ZXJzZXNzaW9uIHRpbWUuCmBgYHtyIGVjaG89RkFMU0V9CgppbnQyIDwtIGRmX2ludGVyc2Vzc2lvbl9hcHJpbDE2cHQgJT4lCiAgZmlsdGVyKGludGVyc2Vzc2lvbl90aW1lID4gMCkgJT4lIAogIGdncGxvdChhZXMoaW50ZXJzZXNzaW9uX3RpbWUvNjApKSArIAogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gOSkgKyAKICBnZ3RpdGxlKCJJbnRlcnNlc3Npb24gdGltZSAoaG91cnMpIikgKwogIGNvb3JkX2NhcnRlc2lhbih4bGltPWMoMCwzMDApKQppbnQyIDwtIGdncGxvdGx5KGludDIpCgppbnQzIDwtIGRmX2ludGVyc2Vzc2lvbl9hcHJpbDE2cHQgJT4lCiAgZmlsdGVyKGludGVyc2Vzc2lvbl90aW1lID4gMCkgJT4lIAogIGdncGxvdChhZXMoaW50ZXJzZXNzaW9uX3RpbWUvNjApKSArIAogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMSkgKwogIGNvb3JkX2NhcnRlc2lhbih4bGltID0gYygwLDI1KSkKaW50MyA8LSBnZ3Bsb3RseShpbnQzKQoKc3VicGxvdChpbnQyLGludDMsIG5yb3dzID0gMikKYGBgCgpOdW1iZXIgb2Ygc2Vzc2lvbnMgcGVyIHdheV9pZAoKYGBge3IgZWNobz1GQUxTRSwgIG1lc3NhZ2U9RkFMU0V9CmludDEgPC0gZGZfaW50ZXJzZXNzaW9uX2FwcmlsMTZwdCAlPiUgCiAgZ3JvdXBfYnkod2F5X2lkKSAlPiUgCiAgc3VtbWFyaXNlKG5fc2Vzc2lvbnMgPSBuKCkpICU+JSAgCiAgZ2dwbG90KGFlcyh4ID1uX3Nlc3Npb25zKSkgKwogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMTApICsKICBjb29yZF9jYXJ0ZXNpYW4oeGxpbSA9IGMoMCwxNTApKSArCiAgZ2d0aXRsZSgiTnVtYmVyIG9mIHNlc3Npb25zIHBlciB3YXlfaWQgaW4gUG9ydG8iKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gNTAsIHNpemUgPSAxLCBjb2xvdXIgPSAiI0ZGMzcyMSIsCiAgICAgICAgICAgICAgICAgICBsaW5ldHlwZSA9ICJkYXNoZWQiKQoKZ2dwbG90bHkoaW50MSkKYGBgCgojIyMgRmlsdGVyaW5nIGJ5IHNlc3Npb25zIHBlciB3YXlfaWQgCgpgYGB7ciBlY2hvPUZBTFNFfQojQ3JlYXRlIGRmIHdpdGggd2F5X2lkcyB3aXRoID41MCBzZXNzaW9ucwoKZGZfaWRfaG90ZWRnZXNfYXByaWwxNnB0IDwtIGRmX2ludGVyc2Vzc2lvbl9hcHJpbDE2cHQgJT4lIAogIGdyb3VwX2J5KHdheV9pZCkgJT4lIAogIHN1bW1hcmlzZShuX3Nlc3Npb25zID0gbigpKSAlPiUgIAogIGZpbHRlcihuX3Nlc3Npb25zID49IDUwKSAKCmRmX2hvdGVkZ2VzX2FwcmlsMTZwdCA8LSBkZl9pZF9ob3RlZGdlc19hcHJpbDE2cHQgJT4lIAogIG1lcmdlKHk9IGRmX2VkZ2VzX2FwcmlsMTZwdCwgYnk9IndheV9pZCIpCgpkZl9zdXBlcmhvdGVkZ2VzX2FwcmlsMTZwdCA8LSBkZl9pbnRlcnNlc3Npb25fYXByaWwxNnB0ICU+JSAKICBncm91cF9ieSh3YXlfaWQpICU+JSAKICBzdW1tYXJpc2Uobl9zZXNzaW9ucyA9IG4oKSkgJT4lICAKICBmaWx0ZXIobl9zZXNzaW9ucyA+PSAyMDApIAoKZGZfc3VwZXJob3RlZGdlc19hcHJpbDE2cHQgPC0gZGZfaWRfaG90ZWRnZXNfYXByaWwxNnB0ICU+JSAKICBtZXJnZSh5PSBkZl9lZGdlc19hcHJpbDE2cHQsIGJ5PSJ3YXlfaWQiKQoKYGBgCgpgYGB7ciBlY2hvPUZBTFNFLCBldmFsPUZBTFNFfSAKIyBQT0lOVFMgZm9yIG1hcHBpbmcKCiNBbGwgd2l0aCBzZXNzaW9ucyA+IDUwCmRmX3BvaW50c19ob3RlZGdlc19hcHJpbDE2cHQgPC0gZGZfaW50ZXJzZXNzaW9uX2FwcmlsMTZwdCAlPiUgCiAgZ3JvdXBfYnkod2F5X2lkKSAlPiUgCiAgc3VtbWFyaXNlKG5fc2Vzc2lvbnMgPSBuKCkpICU+JSAKICBmaWx0ZXIobl9zZXNzaW9ucyA+PSA1MCkgJT4lIAogIG1lcmdlKCB5ID0gZGZfcG9pbnRzX2VkZ2Vfb3NtX2FwcmlsMTZwdCwgYnkgPSAid2F5X2lkIikgCgpkZl9wb2ludHNfc3VwZXJob3RlZGdlc19hcHJpbDE2cHQgPC0gZGZfaW50ZXJzZXNzaW9uX2FwcmlsMTZwdCAlPiUgCiAgZ3JvdXBfYnkod2F5X2lkKSAlPiUgCiAgc3VtbWFyaXNlKG5fc2Vzc2lvbnMgPSBuKCkpICU+JSAKICBmaWx0ZXIobl9zZXNzaW9ucyA+PSAyMDApICU+JSAKICBtZXJnZSggeSA9IGRmX3BvaW50c19lZGdlX29zbV9hcHJpbDE2cHQsIGJ5ID0gIndheV9pZCIpIAoKCmRmX3N1cGVyaG90ZWRnZXNfYXByaWwxNnB0IDwtbXV0YXRlKGRmX3N1cGVyaG90ZWRnZXNfYXByaWwxNnB0LCBjbGFzcyA9IGlmZWxzZShob3VyKHRpbWUpID49NyAmIGhvdXIodGltZSkgPD0gMjAsIAogICAgICAgICAgICAgICAgICAgICAgICAiZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm5pZ2h0IikpCgoKI0RheQpkZl9wb2ludHNfaG90ZWRnZXNfYXByaWwxNnB0X2QgPC0gZGZfaG90ZWRnZXNfYXByaWwxNnB0ICU+JSAKICBmaWx0ZXIoaG91cih0aW1lKSA+PTcsIGhvdXIodGltZSk8PSAyMCwgbl9zZXNzaW9ucyA+PSA1MCkgJT4lIAogIG1lcmdlKCB5ID0gZGZfcG9pbnRzX2VkZ2Vfb3NtX2FwcmlsMTZwdCwgYnkgPSAid2F5X2lkIikgCgojIE5pZ2h0CmRmX3BvaW50c19hcHJpbDE2cHRfbmlnaHRfbiA8LSBkZl9ob3RlZGdlc19hcHJpbDE2cHQgJT4lIAogIGZpbHRlcihob3VyKHRpbWUpIDw3IHwgaG91cih0aW1lKSA+IDIwLCBuX3Nlc3Npb25zID49IDIwKSAlPiUgCiAgbWVyZ2UoIHkgPSBkZl9wb2ludHNfZWRnZV9vc21fYXByaWwxNnB0LCBieSA9ICJ3YXlfaWQiKSAKCmBgYAoKYGBge3IgZWNobz1GQUxTRX0KZGZfaW50ZXJzZXNzaW9uX2FwcmlsMTZwdCA8LSBtdXRhdGUoZGZfaW50ZXJzZXNzaW9uX2FwcmlsMTZwdCwgY2xhc3MgPSBpZmVsc2UoaG91cih0aW1lKSA+PTcgJiBob3VyKHRpbWUpIDw9IDIwLCAKICAgICAgICAgICAgICAgICAgICAgICAgImRheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJuaWdodCIpKQogIApgYGAKCgojIyMgRUNERiAKYGBge3IgZWNobz1GQUxTRX0KZTEgPC0gZ2dwbG90KHN1YnNldChkZl9pbnRlcnNlc3Npb25fYXByaWwxNnB0LCBpbnRlcnNlc3Npb25fdGltZSA+IDApLCBhZXMoaW50ZXJzZXNzaW9uX3RpbWUpKSArIAogIHN0YXRfZWNkZihnZW9tID0gInN0ZXAiKSArCiAgeGxhYigiSW50ZXJzZXNzaW9uIHRpbWUobWlucykiKQoKZTIgPC0gZ2dwbG90KHN1YnNldChkZl9pbnRlcnNlc3Npb25fYXByaWwxNnB0LCBpbnRlcnNlc3Npb25fdGltZSA+IDApLCBhZXMoaW50ZXJzZXNzaW9uX3RpbWUpKSArIAogIHNjYWxlX3hfbG9nMTAoKSArc3RhdF9lY2RmKGdlb20gPSAic3RlcCIpICArIHhsYWIoIkludGVyc2Vzc2lvbiB0aW1lIExvZyIpCgpncmlkLmFycmFuZ2UoZTEsIGUyLCBuY29sPSAyLCB0b3AgPSAiSW50ZXJzZXNzaW9uIHRpbWUgYWxsIHNlc3Npb25zIFBvcnRvIChtaW5zKSIpCmBgYAogCmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9RkFMU0V9CgojRG9udCwgd2l0aG91dCBjb2xvcnMKZTMgPC0gIGdncGxvdChkZl9ob3RlZGdlc19hcHJpbDE2cHRfZGF5LCBhZXMoYXZnX2l0bSkpICsgCiAgc2NhbGVfeF9sb2cxMChicmVha3MgPSBzZXEoMCwxMDAwLDIwMCkpICsKICBzdGF0X2VjZGYoZ2VvbSA9ICJzdGVwIikgICsgCiAgeGxhYigiIExvZyBJbnRlcnNlc3Npb24gdGltZShtaW4pIikgCiAgCmU0IDwtICBnZ3Bsb3QoZGZfaG90ZWRnZXNfYXByaWwxNnB0X25pZ2h0LCBhZXMoeCA9IGF2Z19pdG0pKSArIAogIHNjYWxlX3hfbG9nMTAoYnJlYWtzID0gc2VxKDAsMTAwMCwyMDApKSArCiAgc3RhdF9lY2RmKGdlb20gPSAic3RlcCIpICArCiAgeGxhYigiIExvZyBJbnRlcnNlc3Npb24gdGltZShtaW4pIikgCgpncmlkLmFycmFuZ2UoZTMsIGU0LCBuY29sPSAyLCB0b3AgID0gIkVDREYgQXZlcmFnZSBJbnRlcnNlc3Npb24gdGltZSBkYXkoPjUwKSAiKQpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9RkFMU0V9CiMgQ2xhc3NpZnlpbmcgcG9pbnRzIGJ5IGRheSBmb3IgRUNERiAKZGZfaW50ZXJzZXNzaW9uX2FwcmlsMTZwdCA8LW11dGF0ZShkZl9pbnRlcnNlc3Npb25fYXByaWwxNnB0LCBjbGFzcyA9IGlmZWxzZShob3VyKHRpbWUpID49NyAmIGhvdXIodGltZSkgPD0gMjAsIAogICAgICAgICAgICAgICAgICAgICAgICAiZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgIm5pZ2h0IikpCgpkZl9pbnRlcnNlc3Npb25fYXByaWwxNnB0ICU+JSAKICBmaWx0ZXIoaW50ZXJzZXNzaW9uX3RpbWUgPjApICU+JSAKICBzdWJzZXQod2F5X2lkICVpbiUgZGZfaG90ZWRnZXNfYXByaWwxNnB0JHdheV9pZCkgJT4lIAogIGdncGxvdCggYWVzKGludGVyc2Vzc2lvbl90aW1lLCBjb2xvcj0gY2xhc3MgKSkgKyAKICBzY2FsZV94X2xvZzEwKCkgKyBzdGF0X2VjZGYoZ2VvbSA9ICJzdGVwIikgKyAKICBnZ3RpdGxlKCJJbnRlcnNlc3Npb24gdGltZSA+NTAgc2Vzc2lvbnMgUG9ydG8iKQpgYGAKCgpgYGB7ciBlY2hvPUZBTFNFfQpkZl9pbnRlcnNlc3Npb25fYXByaWwxNnB0ICU+JSAKICBmaWx0ZXIoaW50ZXJzZXNzaW9uX3RpbWUgPjApICU+JSAKICBzdWJzZXQod2F5X2lkICVpbiUgZGZfc3VwZXJob3RlZGdlc19hcHJpbDE2cHQkd2F5X2lkKSAlPiUgCiAgZ2dwbG90KCBhZXMoaW50ZXJzZXNzaW9uX3RpbWUsIGNvbG9yPSBjbGFzcyApKSArIAogIHNjYWxlX3hfbG9nMTAoKSArIHN0YXRfZWNkZihnZW9tID0gInN0ZXAiKSArIAogIGdndGl0bGUoIkludGVyc2Vzc2lvbiB0aW1lID4yMDAgc2Vzc2lvbnMgUG9ydG8iKQpgYGAKCgpgYGB7ciAgZWNobyA9IEZBTFNFLCBldmFsID0gRkFMU0UgfQoKIyBTYW1lIGFzIHBsb3RseSBiZWZvcmUgYnV0IHNlcGFyYXRlLiBJZ25vcmUuIAoKRUNERiBhbGwgYnkgI3BvaW50cyAKZWNkZl9hbGwgPC0gZ2dwbG90KGRmX29zbV9lZGdlLCBhZXMocG9pbnRzKSkgKyAKICBzY2FsZV94X2xvZzEwKCkgKyBzdGF0X2VjZGYoZ2VvbSA9ICJzdGVwIikgKyB4bGFiKCJBbGwgcG9pbnRzIikKCmVjZGZfZGF5PC0gZ2dwbG90KGRmX29zbV9lZGdlLCBhZXMocG9pbnRzKSkgKyAKICBzY2FsZV94X2xvZzEwKCkgKyBzdGF0X2VjZGYoZ2VvbSA9ICJzdGVwIikgKyB0aXRsZSgiRUNERiBkYXkiKSsgeGxhYigiUG9pbnRzIGF0IGRheSIpCgplY2RmX25pZ2h0IDwtIGdncGxvdChkZl9vc21fZWRnZSwgYWVzKHBvaW50cykpICsgCiAgc2NhbGVfeF9sb2cxMCgpICsgc3RhdF9lY2RmKGdlb20gPSAic3RlcCIpICsgdGl0bGUoIkVDREYgbmlnaHQiKSsgeGxhYigiUG9pbnRzIGF0IG5pZ2h0IikKCmdyaWQuYXJyYW5nZShlY2RmX2FsbCxlY2RmX2RheSxlY2RmX25pZ2h0LCAgbmNvbD0zKQoKYGBgCgoKRUNERiBieSAjc2Vzc2lvbnMgCgpgYGB7ciBlY2hvPUZBTFNFfQpkZl9pbnRlcnNlc3Npb25fYXByaWwxNnB0ICU+JSAKICBncm91cF9ieSh3YXlfaWQpICU+JSAKICBzdW1tYXJpc2Uoc2Vzc2lvbnMgPSBuKCkgKSAlPiUgCiAgZ2dwbG90KGFlcyhzZXNzaW9ucykpICsgCiAgc2NhbGVfeF9sb2cxMCgpICsgc3RhdF9lY2RmKGdlb20gPSAic3RlcCIpICsKICBnZ3RpdGxlKCJFQ0RGIG51bWJlciBvZiBzZXNzaW9ucyBhbGwgUG9ydG8iKQogIApgYGAKCiMjIyAgRWRnZXMgd2l0aCA+NTAgc2Vzc2lvbnMuIAoKCmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9VFJVRX0KbG93MSA8LSBkZl9pbnRlcnNlc3Npb25fYXByaWwxNnB0ICU+JSAKICBzdWJzZXQod2F5X2lkICVpbiUgZGZfaG90ZWRnZXNfYXByaWwxNnB0JHdheV9pZCkgJT4lIAogIHN1YnNldCggaW50ZXJzZXNzaW9uX3RpbWUgPCBxdWFudGlsZShkZl9pbnRlcnNlc3Npb25fYXByaWwxNnB0JGludGVyc2Vzc2lvbl90aW1lLCAwLjM1KSkgJT4lIAogIGdncGxvdChhZXMoaW50ZXJzZXNzaW9uX3RpbWUpKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlucyA9IDEwKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwyMDAsMTApKSsKICB4bGFiKCJJbnRlcnNlc3Npb24gdGltZSAobWlucykiKSArIAogIGdndGl0bGUoIkxvd2VzdCAzNSUgaW50ZXJzZXNzaW9uIHRpbWUgPjUwIikKCmdncGxvdGx5KGxvdzEpCmBgYAoKCmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9VFJVRX0KYzEgPC0gZGZfaW50ZXJzZXNzaW9uX2FwcmlsMTZwdCAlPiUgCiAgc3Vic2V0KHdheV9pZCAlaW4lIGRmX2hvdGVkZ2VzX2FwcmlsMTZwdCR3YXlfaWQpICU+JSAKICBnZ3Bsb3QoYWVzKGludGVyc2Vzc2lvbl90aW1lLCBmaWxsID0gY2xhc3MpKSArIAogIGdlb21faGlzdG9ncmFtKCkgKyAKICB4bGFiKCJJbnRlcnNlc3Npb24gdGltZSAobWluKSIpICsKICB4bGltKGMoMCwzMDAwKSkgKwogIHlsaW0oYygwLDUwMDApKSArCiAgZ2d0aXRsZSgiSW50ZXJzZXNzaW9uIHRpbWUgPjUwIGRheS9uaWdodCIpCgpnZ3Bsb3RseShjMSkgCmBgYAoKCgpUb3AgMTAlIHBvaW50cwpgYGB7ciBlY2hvID0gRkFMU0UsIGV2YWw9VFJVRX0KCiNOb3QgbmVjZXNzYXJ5IAoKc3VtbWFyeShkZl9wb2ludHNfaG90ZWRnZXNfYXByaWwxNnB0JHBvaW50cykKcXVhbnRpbGUoZGZfcG9pbnRzX2hvdGVkZ2VzX2FwcmlsMTZwdCRwb2ludHMsIDAuOTApCgogYm94cGxvdChkZl9wb2ludHNfaG90ZWRnZXNfYXByaWwxNnB0JHBvaW50cykgIAoKCmBgYAoKCiMjIE1hcCBwb2ludHMgQXByaWwgMjAxNgoKYGBge3IgZWNobz1GQUxTRSwgZXZhbD1GQUxTRX0KI05lY2Vzc2FyeSBmb3IgbWFwcGluZyAKCiNSZW9yZGVyIGNvbHVtbnMKZGZfb3NtX2VkZ2UgPC0gZGZfcG9pbnRzX2hvdGVkZ2VzX2FwcmlsMTZwdCAlPiUgCiAgc2VsZWN0KHdheV9pZCwgcG9pbnRzKQoKZGZfb3NtX2VkZ2UgPC0gZGZfcG9pbnRzX3N1cGVyaG90ZWRnZXNfYXByaWwxNnB0ICU+JSAKICBzZWxlY3Qod2F5X2lkLCBwb2ludHMpCgpkZl9vc21fZWRnZSA8LSBkZl9wb2ludHNfc3VwZXJob3RlZGdlc19hcHJpbDE2cHQgJT4lIAogIHN1YnNldCh3YXlfaWQgJWluJSBkZl9vc21fZWRnZV9pZHMkd2F5X2lkKSAlPiUgCiAgc2VsZWN0KHdheV9pZCwgcG9pbnRzKQoKCiNMaXN0IGJlZm9yZSBwYXNzaW5nIHRvIG1hcC4KbGlzdF9vc21fZWRnZSA8LSBkZl9vc21fZWRnZVssIDFdCgpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9RkFMU0V9CiMgQ3JlYXRpbmcgdGhlIGVtcHR5IG1hcCBvZiBQb3J0bwoKI1BvaW50cwojYm94cGxvdChkZl9vc21fZWRnZSRwb2ludHMpCgpmZXVwIDwtICAgcXVhbnRpbGUoZGZfb3NtX2VkZ2UkcG9pbnRzLCAwLjkwKQpzdXBlcmlvciA8LSBxdWFudGlsZShkZl9vc21fZWRnZSRwb2ludHMsIDAuNykKbWVkaW8gPC0gcXVhbnRpbGUoZGZfb3NtX2VkZ2UkcG9pbnRzLCAwLjUpCmxvdyA8LSBxdWFudGlsZShkZl9vc21fZWRnZSRwb2ludHMsIDAuNSkKbG93IDwtIDAKCm0gPC0gbGVhZmxldCgpICU+JSBzZXRWaWV3KGxuZz0tOC42MTQxOSwgbGF0PTQxLjE2MzExLCB6b29tID0gMTMpCm0gPC0gYWRkVGlsZXMobSkgCm0gPC0gYWRkUHJvdmlkZXJUaWxlcyhtLCAiQ2FydG9EQi5Qb3NpdHJvbiIpCgoKY291bnRlciA8LSAxCgpmb3Iod2F5X2lkIGluIGxpc3Rfb3NtX2VkZ2UpIHsKICAKICBkZl93YXlfaWQgPC0gZGJHZXRRdWVyeShjb25fb3NtLCBwYXN0ZTAoIlNFTEVDVCBzdF9hc3RleHQoc3RfdHJhbnNmb3JtKHdheSwgNDMyNikpIEFTIGxpbmUgRlJPTSBwbGFuZXRfb3NtX2xpbmUgV0hFUkUgcGxhbmV0X29zbV9saW5lLm9zbV9pZCA9ICIsIHdheV9pZCkpCiAgCiAgbGluZSA8LSBkZl93YXlfaWQkbGluZQogIGxpbmUgPC0gYXMuY2hhcmFjdGVyKGxpbmUpCiAgCiAgbGluZSA8LSB1bmxpc3Qoc3Ryc3BsaXQobGluZSwgc3BsaXQ9JygnLCBmaXhlZD1UUlVFKSlbMl0KICBsaW5lIDwtIHN1YnN0cihsaW5lLCAxLCBuY2hhcihsaW5lKSAtIDEpCiAgCiAgcGFyc2VkX2xpbmUgPC0gc3Ryc3BsaXQobGluZSwgIiwiKQogIAogIGxvbnMgPC0gYygpCiAgbGF0cyA8LSBjKCkKICAKICBpZihsZW5ndGgocGFyc2VkX2xpbmUpICE9IDApIHsKICAgIAogICAgI0RlZmluaW5nIGxvbnMgYW5kIGxhdHMgYXMgdmFyaWFibGVzIHRvIHVzZSBsYXRlci4KCiAgICBmb3IoY29vcmQgaW4gcGFyc2VkX2xpbmVbWzFdXSkgewogICAgICAKICAgICAgbG9uIDwtIHVubGlzdChzdHJzcGxpdChjb29yZCwgc3BsaXQ9JyAnLCBmaXhlZD1UUlVFKSlbMV0KICAgICAgbGF0IDwtIHVubGlzdChzdHJzcGxpdChjb29yZCwgc3BsaXQ9bG9uLCBmaXhlZD1UUlVFKSlbMl0KICAgICAgbGF0IDwtIHN1YnN0cihsYXQsIDIsIG5jaGFyKGxhdCkpCiAgICAgIAogICAgICBsb24gPC0gYXMubnVtZXJpYyhsb24pCiAgICAgIGxhdCA8LSBhcy5kb3VibGUobGF0KQogICAgICAKICAgICAgbG9ucyA8LSBjKGxvbnMsIGxvbikKICAgICAgbGF0cyA8LSBjKGxhdHMsIGxhdCkKICAgICAgCiAgICB9CiAgICAKICAgICMgRGVjaWRpbmcgdGhlIGNvbG9yIG9mIHRoZSBwb2ludC4KCiAgICBpZihkZl9vc21fZWRnZVtjb3VudGVyLCAyXSA+IGZldXApIHsKICAgICAgICAgIAogICAgICAgICAgbSA8LSBhZGRQb2x5bGluZXMobSwgbG9ucywgbGF0cywgY29sb3I9J2JsdWUnLCBwb3B1cCA9IHBhc3RlKCIiLCB3YXlfaWQsIHNlcCA9ICIiKSkgCiAgICAKICAgICAgICB9IGVsc2UgaWYgKGRmX29zbV9lZGdlW2NvdW50ZXIsIDJdID49IHN1cGVyaW9yICYmIGRmX29zbV9lZGdlW2NvdW50ZXIsIDJdIDw9IGZldXApIHsKICAgICAgICAgIAogICAgICAgICAgbSA8LSBhZGRQb2x5bGluZXMobSwgbG9ucywgbGF0cywgY29sb3I9J3JlZCcsIHBvcHVwID0gcGFzdGUoIiIsIHdheV9pZCwgc2VwID0gIiIpKSAgCiAgICAgICAgCiAgICAgICAgfSBlbHNlIGlmIChkZl9vc21fZWRnZVtjb3VudGVyLCAyXSA+PSBtZWRpbyAmJiBkZl9vc21fZWRnZVtjb3VudGVyLCAyXSA8PSBzdXBlcmlvcikgewogICAgICAgICAgCiAgICAgICAgICBtIDwtIGFkZFBvbHlsaW5lcyhtLCBsb25zLCBsYXRzLCBjb2xvcj0neWVsbG93JywgcG9wdXAgPSBwYXN0ZSgiIiwgd2F5X2lkLCBzZXAgPSAiIikpCiAgICAgICAgICAKICAgICAgICB9IGVsc2UgaWYgKGRmX29zbV9lZGdlW2NvdW50ZXIsIDJdID49IGxvdyAmJiBkZl9vc21fZWRnZVtjb3VudGVyLCAyXSA8PSBtZWRpbykgewogICAgICAgICAgCiAgICAgICAgICBtIDwtIGFkZFBvbHlsaW5lcyhtLCBsb25zLCBsYXRzLCBjb2xvcj0nZ3JlZW4nLCBwb3B1cCA9IHBhc3RlKCIiLCB3YXlfaWQsIHNlcCA9ICIiKSkKICAgICAgICAgIAogICAgICAgIH0KICAgICAgICAKICAgICAgICBjb3VudGVyIDwtIGNvdW50ZXIgKyAxIAogICAgICAgIAogICAgICB9CiAgICAgIAogICAgICAjY29udGVudCA8LSBwYXN0ZSgidyIsIHdheV9pZCwgc2VwID0gIiIpCiAgICAgICNtIDwtIGFkZFBvcHVwcyhtLCBsb25zLCBsYXRzLCBjb250ZW50LCBvcHRpb25zID0gcG9wdXBPcHRpb25zKGNsb3NlQnV0dG9uID0gVFJVRSkpCiAgICAgICNtIDwtIGFkZExhYmVsT25seU1hcmtlcnMobSwgbG9ucyxsYXRzLCBsYWJlbCA9IHBhc3RlKCIiLCB3YXlfaWQsIHNlcCA9ICIiKSwgCiAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKG5vSGlkZSA9IEYsIHRleHRzaXplID0gIjE1cHgiKSkKICAgICAgI3ByaW50KGxpbmUpCiAgICAKICAgIH0KCmBgYAojIyMgU2hvd2luZyBtYXBzIAoKVHJhZmZpYyAgTWFwIEFwcmlsIFBvcnRvIDIwMTYgYWxsCmBgYHtyIGV2YWw9IFRSVUV9CiMgU2hvd2luZyBNYXAuCm0xIDwtIG0KbTEKI21hcHNob3QobSwgdXJsID0gcGFzdGUwKGdldHdkKCksICIvbWFwLmh0bWwiKSkKYGBgCgpUcmFmZmljICBNYXAgQXByaWwgMjAxNiBhbGwgPjUwCmBgYHtyIGVjaG89RkFMU0V9Cm1fNTAgPC0gbQptXzUwIApgYGAKClRyYWZmaWMgZGF5IE1hcCBBcHJpbCAyMDE2CmBgYHtyIGVjaG89RkFMU0V9Cm1fNTBfZGF5IDwtIG0KbV81MF9kYXkKYGBgCgpUcmFmZmljIG5pZ2h0IE1hcCBBcHJpbCAyMDE2CmBgYHtyIGVjaG89RkFMU0V9Cm1fMjBfbmlnaHQgPC0gbQptXzIwX25pZ2h0CmBgYAoKVG9wIDEyIGVkZ2VzIAoKYGBge3IgZWNobz1GQUxTRX0KbV9ob3QgPC0gbQptX2hvdApgYGAKCjwhLS0gSWdub3JlIHRoaXMgbWFwcyBmb3IgdGhlIG1vbWVudCAgIApNYXAgSW50ZXJzZXNzaW9uIHRpbWUgYWxsIDEuMzBoLgpgYGB7ciBlY2hvPUZBTFNFfQptX2l0bSA8LSBtCm1faXRtCmBgYAoKTWFwIEludGVyc2Vzc2lvbiB0aW1lICg8MS4zaCkgZGF5LgpgYGB7ciBlY2hvPUZBTFNFfQptX2l0bV9kYXkgPC0gbQptX2l0bV9kYXkKI21hcHNob3QobV9uaWdodF9zZW1zZXNzaW9ucywgZmlsZSA9ICJ+L21hcHMvdG9wX2ludGVyc2Vzc2lvbnNfbmlnaHRfYXByaWwucG5nIikKYGBgCk1hcCBJbnRlcnNlc3Npb24gdGltZSAoPDJoKW5pZ2h0LgpgYGB7ciBlY2hvPUZBTFNFfQptX2l0bV9uaWdodCA8LSBtCm1faXRtX25pZ2h0CiNtYXBzaG90KG0sIGZpbGUgPSAifi9tYXBzL19hbGxfYXByaWwucG5nIikKYGBgCi0tPgoKIyMgI1Nlc3Npb25zIGJ5IGRhdGUgPjUwCgojIyMgRGF5IG9mIHRoZSB3ZWVrIApgYGB7ciBlY2hvPSBGQUxTRX0gCmRmX2ludGVyc2Vzc2lvbl9hcHJpbDE2cHQgJT4lIAogIHN1YnNldCh3YXlfaWQgJWluJSBkZl9ob3RlZGdlc19hcHJpbDE2cHQkd2F5X2lkKSAlPiUgCiAgZ3JvdXBfYnkod2Vla2RheSA9d2RheSh0aW1lKSkgJT4lIAogIHN1bW1hcmlzZSh3YXlfaWRzID0gbigpKSAlPiUgCiAgZ2dwbG90KGFlcyh3ZWVrZGF5LHdheV9pZHMpKSArIAogIGdlb21fbGluZSgpICsKICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cyA9IGMoIkRvbWluZ28iLCAiU2VndW5kYSIsICJUZXLDp2EiLCAiUXVhcnRhIiwgIlF1aW50YSIsIAogICAgIlNleHRhIiwgIlPDoWJhZG8iKSkKCmBgYAoKIyMjIEJ5IGRheSAKYGBge3IgZWNobz0gRkFMU0V9CmRmX2ludGVyc2Vzc2lvbl9hcHJpbDE2cHQgJT4lIAogIHN1YnNldCh3YXlfaWQgJWluJSBkZl9ob3RlZGdlc19hcHJpbDE2cHQkd2F5X2lkKSAlPiUgCiAgZ3JvdXBfYnkoZGF5ID1kYXkodGltZSkpICU+JSAKICBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIAogIGdncGxvdChhZXMoZGF5LG4pKSArIAogIGdlb21fbGluZSgpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgxLDMwLDEpKQoKYGBgCgojI0J5IGhvdXIgCmBgYHtyIGVjaG89IEZBTFNFfSAKZGZfaW50ZXJzZXNzaW9uX2FwcmlsMTZwdCAlPiUgCiAgc3Vic2V0KHdheV9pZCAlaW4lIGRmX2hvdGVkZ2VzX2FwcmlsMTZwdCR3YXlfaWQpICU+JSAKICBncm91cF9ieShob3VyID1ob3VyKHRpbWUpKSAlPiUgCiAgc3VtbWFyaXNlKG4gPSBuKCkpICU+JSAKICBnZ3Bsb3QoYWVzKGhvdXIsbikpICsgCiAgZ2VvbV9saW5lKCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwyMywxKSkKCmBgYAoKIyMgU3BlZWRzID41MAoKYGBge3J9CiMgU3BlZWQgYnkgd2F5X2lkIGFuZCBzZXNzaW9uLlwKYXZnX3NwZWVkX3dheWlkIDwtIGRmX3NwZWVkICU+JSAKICBzdWJzZXQod2F5X2lkICVpbiUgZGZfaG90ZWRnZXNfYXByaWwxNnB0JHdheV9pZCkgJT4lIAogIGdyb3VwX2J5KHdheV9pZCkgJT4lIAogIHN1bW1hcmlzZShhdmdfc3BlZWQgPSBtZWFuKChzcGVlZCoxOCkvNSksIG4gPSBuKCkgKQoKZ2dwbG90KGF2Z19zcGVlZF93YXlpZCwgYWVzKGF2Z19zcGVlZCkpICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDMpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQXZnX3NwZWVkKGttL2gpIiwgIGJyZWFrcyA9IHNlcSgwLCAxNTAsIDMpICkKYGBgCgpTcGVlZCBieSB3ZWVrIApgYGB7ciBlY2hvPUZBTFNFfQpkZl9ob3RlZGdlc19hcHJpbDE2cHQgJT4lIAogIGdyb3VwX2J5KHdlZWtkYXkgPXdkYXkodGltZSkpICU+JSAKICBzdW1tYXJpc2UoYXZnX3NwZWVkID0gbWVhbigoc3BlZWQqMTgpLzUpKSAlPiUgCiAgZ2dwbG90KGFlcyh3ZWVrZGF5LCBhdmdfc3BlZWQpKSArIAogIGdlb21fbGluZSgpICsKICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cyA9IGMoIkRvbWluZ28iLCAiU2VndW5kYSIsICJUZXLDp2EiLCAiUXVhcnRhIiwgIlF1aW50YSIsIAogICAgIlNleHRhIiwgIlPDoWJhZG8iKSkgKwogIHlsYWIoIkF2ZyBzcGVlZCBrbS9oIikKYGBgCgpTcGVlZCBieSBkYXkKCmBgYHtyIGVjaG89RkFMU0V9CmRmX2hvdGVkZ2VzX2FwcmlsMTZwdCAlPiUgCiAgZ3JvdXBfYnkoZGF5ID1kYXkodGltZSkpICU+JSAKICBzdW1tYXJpc2UoYXZnX3NwZWVkID0gbWVhbigoc3BlZWQqMTgpLzUpKSAlPiUgCiAgZ2dwbG90KGFlcyhkYXksIGF2Z19zcGVlZCkpICsgCiAgZ2VvbV9saW5lKCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwzMCwxKSkrCiAgeWxhYigiQXZnIHNwZWVkIGttL2giKQpgYGAKClNwZWVkIGJ5IGhvdXIKYGBge3IgZWNobz1GQUxTRX0KZGZfaG90ZWRnZXNfYXByaWwxNnB0ICU+JSAKICBncm91cF9ieShob3VyID1ob3VyKHRpbWUpKSAlPiUgCiAgc3VtbWFyaXNlKGF2Z19zcGVlZCA9IG1lYW4oKHNwZWVkKjE4KS81KSkgJT4lIAogIGdncGxvdChhZXMoaG91ciwgYXZnX3NwZWVkKSkgKyAKICBnZW9tX2xpbmUoKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLDIzLDEpKSsKICB5bGFiKCJBdmcgc3BlZWQga20vaCIpCmBgYAoKTnVtYmVyIG9mIHNlc3Npb24gcGVyIGhvdXIKYGBge3IgZWNobz1GQUxTRX0KZGZfaG90ZWRnZXNfYXByaWwxNnB0ICU+JSAKICAgIGZpbHRlcih3ZGF5KHRpbWUpICE9IDEgLCB3ZGF5KHRpbWUpICE9IDcgKSAlPiUgCiAgICBncm91cF9ieShob3VyID1ob3VyKHRpbWUpKSAlPiUgCiAgICBzdW1tYXJpc2Uoc2Vzc2lvbnMgPSBuX2Rpc3RpbmN0KHNlc3Npb25faWQpKSAlPiUgCiAgZ2dwbG90KGFlcyhob3VyLCBzZXNzaW9ucykpICsgCiAgZ2VvbV9saW5lKCkrCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLDIzLDEpKQpgYGAKCldheXNfaWRzIHBlciBoYWxmIGhvdXIKYGBge3J9CnBydWViYSA8LSB0YWJsZShjdXQoZmlsdGVyKGRmX2hvdGVkZ2VzX2FwcmlsMTZwdCwgZGF5KHRpbWUpIDwgNykkdGltZSwgYnJlYWtzID0gIjMwIG1pbnMiKSkKcGxvdChwcnVlYmEsIHhsYWIgPSAiZGF0ZSIsIHlsYWIgPSAiZnJlcXVlbmN5IikgCmBgYAoKIyMgVGltZSBzZXJpZSBwZXIgd2F5X2lkIAoKYGBge3IgZWNobz1GQUxTRX0KZGZfc3VwZXJob3RlZGdlc19hcHJpbDE2cHQgJT4lIAogIGZpbHRlciggd2F5X2lkID09IGxpc3Rfb3NtX2VkZ2VbM10gKSAlPiUgCiAgcGxvdF9seSh4PSB+dGltZSwgeT0gfihzcGVlZCoxOCkvNSwgY29sb3IgPSB+Y2xhc3MpICU+JSAKICBsYXlvdXQodGl0bGUgPSBwYXN0ZSgiVGltZSBzZXJpZXMgb2Ygc3BlZWQgZm9yIHdheV9pZCIsbGlzdF9vc21fZWRnZVszXSwgc2VwID0gIiAiICkseWF4aXMgPSBsaXN0KHRpdGxlPSJTcGVlZCAoa20vaCkiKSwKICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlPSJEYXRlIikpCgpgYGAKCmBgYHtyfQpmaWx0ZXIoZGZfaG90ZWRnZXNfYXByaWwxNnB0LCB3YXlfaWQgPT0gMzcxNDE5NjcgKSAlPiUgCiAgZ3JvdXBfYnkoZGF5KHRpbWUpKSAlPiUgCiAgZ2dwbG90KGFlcyh4PSB0aW1lLCB5PSAoc3BlZWQqMTgpLzUpKSArIAogIGdlb21fbGluZSgpCmBgYAoKCgoK